tableId = 0;

function phonebookTable(useGroups_){
    var gr = useGroups_ ? 1 : 0;
    $.ajax({
        url: "ajax/gen-xml.php?rand=" + Math.random(),
        type: "GET",
        data: {
            useGroups: gr
        },
        dataType: "xml",
        success: buildTable
    });
}

function buildTable(data){
    var table;
    xmlRoot = data.documentElement;
    var grp = xmlRoot.getElementsByTagName("group");
    if (grp.length == 0) {
        var usr = xmlRoot.getElementsByTagName("user");
        if (usr.length == 0) {
            alert("XML parse error!");
            return;
        }
        table = getTableUsers(usr);
    }
    else 
        table = getTableGroups(grp);
    
    div = document.getElementById("phonebookDiv");
    $(div).empty();
    div.appendChild(table);
    funcTraverse();
}

function getTableUsers(usr){
    var table = document.createElement("table");
    var tbody = document.createElement("tbody");
    
    var color = ["color1", "color2"];
    var cc = 0;
    
    for (var i = 0; i < usr.length; cc = Math.abs(cc - 1), i++) {
        var row = document.createElement("tr");
        row.id = usr[i].attributes[1].nodeValue;
        var td = document.createElement("td");
        td.appendChild(document.createTextNode(usr[i].attributes[0].nodeValue));
        row.appendChild(td);
        td = document.createElement("td");
        td.appendChild(document.createTextNode(usr[i].getElementsByTagName("number")[0].firstChild.data));
        td.className = "num";
        row.appendChild(td);
        td = document.createElement("td");
        if (usr[i].getElementsByTagName("mobile")[0].firstChild) {
            td.appendChild(document.createTextNode(usr[i].getElementsByTagName("mobile")[0].firstChild.data));
        }
        else 
            td.appendChild(document.createTextNode(""));
        td.className = "num";
        row.appendChild(td);
        row.className = color[cc];
        tbody.appendChild(row);
    }
    tbody.id = "tb";
    
    // дописывает в таблицу две строки с полями и кнопками для редактирования
    genRowsForEditForm(tbody);
    
    table.appendChild(tbody);
    table.id = "phonebook";
    return table;
}

function getTableGroups(grp){
    var table = document.createElement("table");
    var tbody = document.createElement("tbody");
    //пробегаем по группам
    for (var i = 0; i < grp.length; i++) {
        var tr = document.createElement("tr");
        var td = document.createElement("td");
        
        //название группы
        td.appendChild(document.createTextNode(grp[i].attributes[0].nodeValue));
        td.setAttribute("colSpan", "3");
        td.setAttribute("width", "100%");
        
        tr.appendChild(td);
        tr.className = "header";
        tr.setAttribute("gid", grp[i].attributes[1].nodeValue);
        
        
        tbody.appendChild(tr);
        var curr_users = grp[i].getElementsByTagName("user");
        //в группе просматриваем абонентов
        var color = ["color1", "color2"];
        var cc = 0;
        for (var j = 0; j < curr_users.length; cc = Math.abs(cc - 1), j++) {
            tr = document.createElement("tr");
            tr.className = color[cc];
            td = document.createElement("td");
            td.setAttribute("width", "60%");
            //имя абонента
            td.appendChild(document.createTextNode(curr_users[j].attributes[0].nodeValue));
            tr.appendChild(td);
            td = document.createElement("td");
            td.setAttribute("width", "20%");
            //номер абонента
            td.appendChild(document.createTextNode(curr_users[j].getElementsByTagName("number")[0].firstChild.data));
            td.className = "num";
            tr.appendChild(td);
            td = document.createElement("td");
            //мобильник            
            td.setAttribute("width", "20%");
            if (curr_users[j].getElementsByTagName("mobile")[0].firstChild) {
                td.appendChild(document.createTextNode(curr_users[j].getElementsByTagName("mobile")[0].firstChild.data));
            }
            else 
                td.appendChild(document.createTextNode(""));
            td.className = "num";
            tr.id = curr_users[j].attributes[1].nodeValue;
            tr.appendChild(td);
            tbody.appendChild(tr);
        }
    }
    tbody.id = "tb";
    
    // дописывает в таблицу две строки с полями и кнопками для редактирования
    genRowsForEditForm(tbody);
    table.appendChild(tbody);
    table.id = "phonebook";
    return table;
}

function genRowsForEditForm(tableBody){
    var editRows = $("#editRowsDiv > table > tbody").html();
    $(tableBody).append(editRows);
}

function toogleContextMenu(boolStatus){
    if (boolStatus) {
        // Привязывает контекстное меню ко всем строкам таблицы 
        // phonebook кроме отмеченных классом header			
        $('#tb > tr:not(.header):not(#editableRow):not(#editableRowButtons)').contextMenu(menu3, {
            showSpeed: 1,
            hideSpeed: 1,
            showCallback: function(){
                unhighlightRow();
                highlightRow(this.target.id);
            },
            hideCallback: function(){
                unhighlightRow();
            }
        });
    }
    else {
        $('#tb > tr:not(.header):not(#editableRow):not(#editableRowButtons)').unbind('click');
    }
}

function highlightRow(id){
    var cloneTr = $("#" + id).clone(false);
    $(cloneTr).addClass("highlighted");
    var prevColor = $("#" + id).css("background-color");
    $(cloneTr).attr("origId", id);
    $(cloneTr).css("background-color", "#E9E8B9");
    $(cloneTr).insertAfter("#" + id);
    $("#" + id).hide();
}

function unhighlightRow(){
    if ($("#tb tr.highlighted").length) {
        var origId = $("tr.highlighted").attr("origId");
        $("#tb tr.highlighted").remove();
        $("#" + origId).show();        
    }
}

var sessionAuth = getSessionVar("AUTH");
var isEdit = sessionAuth == 0;	
var isDelete = sessionAuth == 0;
var isView = sessionAuth <= 1;

// Переменная контекстного меню, хранит элементы меню, параметры и обработчики событий
var menu3 = [{
    'редактировать': {
        onclick: function(menuItem, menu){
            unhighlightRow();
            var row = $(this);
            var gid = getUserGid($(this).attr('id'));
            $("#editGroup option").each(function(){
                if ($(this).val() == gid) {
                    $(this).attr('selected', 'selected');
                }
            });
            $('#inputId').val($(this).attr('id'));
            $("#inputName").val($(this).find('td:eq(0)').html());
            $("#inputNumber").val($(this).find('td:eq(1)').html());
            $("#inputMobile").val($(this).find('td:eq(2)').html());
            $(this).hide();
            $('#editableRow').insertAfter(row).fadeIn('slow');
            $('#editableRowButtons').insertAfter($('#editableRow')).fadeIn('slow');
            toogleContextMenu(false);
        },
        title: 'Редактировать запись',
		disabled: !isEdit
    }
}, {
    'удалить': {
        onclick: function(menuItem, menu){
            // вывод модального диалога подтверждения
            deleteUser(this);
        },
        title: 'Удалить запись',
        disabled: !isDelete
    }
}, {
    'просмотр статистики': {
        onclick: function(menuItem, menu){
            document.location.href = "statistic.php?userId=" + $(this).attr("id");
        },
        title: 'Просмотреть статистику пользователя',
		disabled: !isView
    }
}];

// вызывается после отображения таблицы со справочником
function funcTraverse(){
    $("#cancelBtn").click(function(){
        $('#editableRow').hide();
        $('#editableRowButtons').hide();
        $('#' + $("#inputId").attr("value")).show();
        toogleContextMenu(true);
        return false;
    })
    $("#saveBtn").click(function(){
        ajaxEdit($("#inputId").attr("value"));
        return false;
    })
    
    // Ховер для строк с классом color1
    $('.color1').hover(function(){
        $(this).css('background-color', '#E9E8B9');
    }, function(){
        $(this).css('background-color', '#D9D9D9');
    });
    // Ховер для строк с классом color2
    $('.color2').hover(function(){
        $(this).css('background-color', '#E9E8B9');
    }, function(){
        $(this).css('background-color', '#E9E9E9');
    });    
	if (sessionAuth <= 1) {
		//активирует контекстное меню
		toogleContextMenu(true);
	}    
}

// Действие по нажатию "Удалить" контекстного меню справочника
function deleteUser(tr){
    // id пользователя
    var id = $(tr).attr("id");
    // Имя пользователя    
    var username = $(tr).find("td").html();
    $("#deleteUserDiv .message").text("Удалить абонента '" + username + "' из справочника?")
    $("#deleteUserDiv").dialog({
        buttons: {
            "Удалить": function(){
                $(tr).remove();
                ajaxDelete(id);
                $(this).dialog("destroy");
            },
            "Отмена": function(){
                $(this).dialog("close");
            }
        },
        modal: true,
        draggable: false
    }).dialog("open");
}

function ajaxDelete(id){
    $.ajax({
        url: "ajax/deleteUser.php",
        type: "POST",
        data: {
            ID: id
        },
        dataType: "text",
        success: function (data){
            if (data == 1) {
                unEditUser();
            }
            else 
                unEditUser();
        }
    });
}

function unEditUser(){
    var useGroups = $("#chk").attr("checked");
    phonebookTable(useGroups);
}

function ajaxEdit(id){
    var name = $("#inputName").val();
    var number = $("#inputNumber").val();
    var mobile = $("#inputMobile").val();
    var group = $("#editGroup").val();
    $.ajax({
        url: "ajax/editUser.php",
        type: "POST",
        data: {
            ID: id,
            NAME: name,
            NUMBER: number,
            MOBILE: mobile,
            GID: group
        },
        dataType: "text",
        success: function (data){
            if (data == 1) {
                unEditUser();
            }
            else {
                alert(data);
            }
        }
    });
}

function getUserGid(userId){
    var userGid;
    $.ajax({
        url: "ajax/getGid.php",
        type: "POST",
        data: {
            ID: userId
        },
        dataType: "text",
        async: false,
        success: function getData(data){
            userGid = data;
        }
    });
    return userGid;
}

function getSessionVar(sessionVar){
    var sesVar;
    $.ajax({
        url: "ajax/getSessionVar.php",
        type: "POST",
        data: {
            SESSIONVAR: sessionVar
        },
        dataType: "text",
        async: false,
        success: function (data){
            sesVar = data;
        }
    });
    return sesVar;
}